package cn.edu.tcu.db;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.edu.tcu.bean.AdminBean;
import cn.edu.tcu.myutils.MyUtil;

/**
 * 使用DBUtils完成数据库操作
 * 
 * @author Administrator
 *
 */
public class DBDriver {
	/**
	 * 使用dbutils查询数据库
	 * 
	 * @param sql
	 *            查询sql语句
	 * @param rsh
	 *            结果集类型
	 * @param params
	 *            sql语句查询参数
	 * @return 查询结果集
	 */
	public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) {
		// 返回值
		T result = null;
		try {
			// 创建一个查询对象 queryrunner
			QueryRunner qr = new QueryRunner(DBDataSource.getDataSource());
			// 进行查询操作
			result = qr.query(sql, rsh, params);
		} catch (SQLException e) {
			// dbutils查询数据库异常
			MyUtil.logRootLogger.debug("dbutils查询数据库异常：");
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 使用dbutils新增、删除、修改数据库
	 * 
	 * @param sql
	 *            sql语句
	 * @param params
	 *            sql语句查询参数
	 * @return 新增、删除、修改数据库所影响的记录条数
	 */
	public int update(String sql, Object... params) {
		// 返回值
		int result = 0;
		try {
			// 创建一个查询对象 queryrunner
			QueryRunner qr = new QueryRunner(DBDataSource.getDataSource());
			// 进行查询操作
			result = qr.update(sql, params);
		} catch (SQLException e) {
			// dbutils查询数据库异常
			MyUtil.logRootLogger.debug("dbutils新增、删除、修改数据库异常：");
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 使用dbutils新增数据库
	 * 
	 * @param sql
	 *            新增sql语句
	 * @param rsh
	 *            结果集类型
	 * @param params
	 *            sql语句新增参数
	 * @return 新增操作的结果集
	 */
	public <T> T insert(String sql, ResultSetHandler<T> rsh, Object... params) {
		// 返回值
		T result = null;
		try {
			// 创建一个查询对象 queryrunner
			QueryRunner qr = new QueryRunner(DBDataSource.getDataSource());
			// 进行查询操作
			result = qr.insert(sql, rsh, params);
		} catch (SQLException e) {
			// dbutils查询数据库异常
			MyUtil.logRootLogger.debug("dbutils新增数据库异常：");
			e.printStackTrace();
		}
		return result;
	}
	
	
	public static void main(String[] args) {
		System.out.println("数据连接测试：");
		MyUtil.logRootLogger.info("数据连接测试：");
		String sql = "SELECT * FROM tbadmins";
		// 使用dbutils查询数据库
		// 直接调用DBDriver类的查询方法
		 // 创建DBDriver类的实例对象
		//DBDriver dbd = new DBDriver();
		// 进行查询操作
		List<AdminBean> lstAdmins = DBFactory.getDBDriverInstance().query(sql, new BeanListHandler<>(AdminBean.class));
		//遍历结果集，将查询结果进行显示
		for (AdminBean adminBean : lstAdmins) {
			System.out.println(adminBean.getAdminName());
		}
		
	}
}
